#ifndef GAMEPAGE_H
#define GAMEPAGE_H

#include <QWidget>

//游戏界面
QT_BEGIN_NAMESPACE
namespace Ui { class GamePage; }
QT_END_NAMESPACE
class QButtonGroup; //按钮组
class QTimer;       //定时器

class GamePage : public QWidget
{
    Q_OBJECT

private:
    GamePage(QWidget *parent = nullptr);

public:
    ~GamePage();
    //[static]获取单例对象
    //@return GamePage * 单例对象
    static GamePage *getObject();
    //游戏开始
    void gameStart();
    //暂停
    void gamePause();
    //停止
    void gameStop();

protected slots:
    //老鼠点击槽函数，在此得分
    void mouseClickedSlot();
    //游戏定时器槽函数，在此生成老鼠
    void gameTimerTimeoutSlot();
    //时间定时器，控制读秒
    void timeTimerTimeoutSlot();

protected:
    //绘图事件
    void paintEvent(QPaintEvent *event);
    //鼠标事件
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);

    //老鼠初始化，实例化按钮组，将老鼠添加到按钮组中
    void mouseInit();
    //老鼠移动
    //@param mapIndex 地图序号
    void mouseMove(int mapIndex = 0);


private slots:
    //退出
    void on_btnExit_clicked();
    //开始
    void on_btnStart_clicked();
    //停止
    void on_btnStop_clicked();
    //暂停
    void on_btnPause_clicked();
    //关于界面
    void on_btnAbout_clicked();
    //帮助界面
    void on_btnHelp_clicked();
    //模式切换
    void on_btnChangeMode_clicked();

private:
    Ui::GamePage *ui;
    static GamePage *gp;                //单例对象
    QButtonGroup *mouseGroup = nullptr; //老鼠组
    bool isMove = false;                //是否移动
    QPoint oldPos;                      //起始坐标
    QTimer *gameTimer;                  //游戏定时器
    QTimer *timeTimer;                  //时间定时器
    int gameStat = 0;                   //游戏状态
                                        //0-stop 1-play 2-pause
    int gameMode = 0;                   //游戏模式
                                        //0-计时模式 1-计数模式
};
#endif // GAMEPAGE_H
